/*
 * 文 件 名:  ConfResource.java
 * 版    权:  Huawei Technologies Co., Ltd. Copyright YYYY-YYYY,  All rights reserved
 * 描    述:  <描述>
 * 修 改 人:  admin
 * 修改时间:  2013-6-30
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package org.gfz.frame.core.resource;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.gfz.frame.core.resource.ResourceInitLoad.ResourceType;
import org.gfz.frame.core.resource.model.ConfResourceModel;
import org.gfz.frame.core.resource.model.ResourceModel;

/**
 * <一句话功能简述> <功能详细描述>
 * 
 * @author 姓名 工号
 * @version [版本号, 2013-6-30]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class ConfResource
{
    /**
     * <一句话功能简述> <功能详细描述>
     * 
     * @author 姓名 工号
     * @version [版本号, 2013-6-29]
     * @see [相关类/方法]
     * @since [产品/模块版本]
     */
    public static enum ConfType
    {
        KEY_VALUE
    }
    
    /**
     * 
     */
    private Map<String, Properties> propMap;
    
    /**
     * 
     */
    private static ConfResource instance;
    
    /**
     * 
     * <默认构造函数>
     */
    private ConfResource()
    {
        loadConfResource();
    }
    
    /**
     * 
     * <一句话功能简述>
     * <功能详细描述>
     * @return
     * @see [类、类#方法、类#成员]
     */
    public synchronized static ConfResource getInstance()
    {
        if (null == instance)
        {
            instance = new ConfResource();
        }
        
        return instance;
    }
    
    /**
     * <一句话功能简述>
     * <功能详细描述>
     * @param key
     * @return
     * @see [类、类#方法、类#成员]
     */
    public String getValue(String key)
    {
        String value = "";
        
        if (null == propMap)
        {
            loadConfResource();
        }
        
        Properties pro = null;
        for (String id  : propMap.keySet())
        {
            pro = propMap.get(id);
            
            value = pro.getProperty(key, "");
            
            if (null != value && !"".equals(value.trim()))
            {
                break;
            }
        }
        
        return value;
    }
    
    /**
     * <一句话功能简述>
     * <功能详细描述>
     * @param id
     * @param key
     * @return
     * @see [类、类#方法、类#成员]
     */
    public String getValue(String id, String key)
    {
        String value = "";
        
        if (key == null || "".equals(key.trim()))
        {
          return "";  
        }
        
        
        if (null == id || "".equals(id.trim()))
        {
            value = getValue(key);
        }
        else
        {
            Properties pro = getProperties(id);
            
            if (null != pro)
            {
                value = pro.getProperty(key, "");    
            }
        }
        
        return value;
    }
    
    /**
     * <一句话功能简述>
     * <功能详细描述>
     * @param id
     * @return
     * @see [类、类#方法、类#成员]
     */
    public Properties getProperties(String id)
    {
        if (null == propMap)
        {
            loadConfResource();
        }
        
        return propMap.get(id);
    }
    
    /**
     * <一句话功能简述> <功能详细描述>
     * 
     * @see [类、类#方法、类#成员]
     */
    protected void loadConfResource()
    {
        propMap = new HashMap<String, Properties>();
        
        List<ResourceModel> resList = ResourceInitLoad.getResource(ResourceType.CONF);
        
        if (null == resList)
        {
            return;
        }
        
        ConfResourceModel model = null;
        for (ResourceModel temp : resList)
        {
            if (temp instanceof ConfResourceModel)
            {
                model = (ConfResourceModel)temp;
                
                switch (model.getConfType())
                {
                    case KEY_VALUE:
                        loadProperties(model);
                        break;
                }
            }
        }
    }
    
    /**
     * <一句话功能简述> <功能详细描述>
     * 
     * @param model
     * @see [类、类#方法、类#成员]
     */
    private void loadProperties(ConfResourceModel model)
    {
        String id = model.getResId();
        String path = model.getResPath();
        
        File file = new File(path);
        
        if (!file.exists() || !file.isFile())
        {
            return;
        }
        
        Properties pro = new Properties();
        FileInputStream in = null;
        
        try
        {
            in = new FileInputStream(file);
            pro.load(in);
            
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (null != in)
            {
                try
                {
                    in.close();
                }
                catch (IOException e)
                {
                    in = null;
                }
            }
        }
        
        if (null != pro && !pro.isEmpty())
        {
            propMap.put(id, pro);
        }
        
    }
}
